package com.mezz.bones.im.logic.domain.request;

import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import java.io.Serializable;

/**
 * @Author: zhuang
 * @Date: 2025/5/14 11:06
 * @Description: TODO
 * @Version: 1.0
 **/

@Data
public class ApiPrivateMessageCreateRequest implements Serializable {

    @ApiModelProperty("消息所属用户-发送者ID 如果是管理员发送的消息 userId=admin")
    @NotBlank(message = "发送者用户ID不能为空")
    private String userId;

    @ApiModelProperty("消息对端用户-接收者ID")
    @NotBlank(message = "接收者ID不能为空，请确保接收者ID已正确填写")
    private String peerId;

    @ApiModelProperty("客服相关ID 被服务方→客服方 记录的是客服ID   客服放→被服务方 记录的是供应商ID或者平台ID")
    private String relationId;

    @ApiModelProperty(value = "消息类型(0普通用户消息 1系统消息)")
    @Range(min = 0, max = 1, message = "消息类型无效，必须是 0（普通用户消息）或 1（系统消息）")
    private Integer msgType;

    @ApiModelProperty("是否同步消息到对端 0否1是")
    private Integer sync2Peer;

    @ApiModelProperty("是否需要推送消息到己方 0否1是")
    private Integer push2User;

    /**
     * @see com.mezz.bones.im.common.enums.ContentTypeEnum
     */
    @Pattern(regexp = "text|audio|video|custom|image", message = "消息内容类型错误，必须是 text、audio、video、custom 或 image")
    private String contentType;

    @ApiModelProperty("消息内容")
    private JSONObject content;

    /**
     * @see com.mezz.bones.im.common.enums.ContentTypeEnum
     */
    @ApiModelProperty("消息扩展信息")
    private JSONObject msgExtra;
}
